package it.fantacalcio.spring.service;

import it.fantacalcio.hibernate.dao.MessaggioDAO;
import it.fantacalcio.hibernate.sessionfactory.HibernateSessionFactory;
import it.fantacalcio.model.Argomento;
import it.fantacalcio.model.Messaggio;
import it.fantacalcio.utility.UtilDate;

import java.util.Date;
import java.util.List;

import org.hibernate.Transaction;

public class MessaggioServiceImpl implements MessaggioService {
	
	private MessaggioDAO messaggioDAO;
	
	public MessaggioDAO getMessaggioDAO() {
		return messaggioDAO;
	}

	public void setMessaggioDAO(MessaggioDAO messaggioDAO) {
		this.messaggioDAO = messaggioDAO;
	}
	
	//----------------------------------------------------------------------------------
	@Override
	public int cancella(Messaggio messaggio) throws Exception {
		if(messaggio==null || messaggio.getId()<1){
			return -1;
		}
		try{
			Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
			messaggioDAO.delete(messaggio);
			tx.commit();
		}catch(Exception e){
			e.printStackTrace();
			return -2;
		}
		return 1;
	}

	@Override
	public List<Messaggio> listaPerArgomento(Argomento argomento)
			throws Exception {
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		List<Messaggio> result=messaggioDAO.listaPerArgomento(argomento);
		tx.commit();
		result = convertiData(result);
		return result;
	}

	@Override
	public int salva(Messaggio messaggio) throws Exception {
		if(messaggio==null){
			return -1;
		}
		try{
			Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
			messaggioDAO.save(messaggio);
			tx.commit();
		}catch(Exception e){
			e.printStackTrace();
			return -2;
		}
		return 1;
	}
	
	@Override
	public Messaggio get(Long id) throws Exception {
		if(id<1){
			return null;
		}
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		Messaggio messaggio = messaggioDAO.get(id);
		tx.commit();
		return messaggio;
	}
	
	private List<Messaggio> convertiData(List<Messaggio> lista) {
		
		for (Messaggio messaggio : lista) {
			Date data = messaggio.getData();
			String dataString = UtilDate.dateToString(data, "dd/MM/yyyy hh:mm:ss");
			messaggio.setDataString(dataString);
		}
		
		return lista;
	}

}
